草庐IT

c++ - 虚拟的概念

全部标签

c++ - 使用 mpirun/mpiexec 运行时检测不使用 MPI

我正在编写一个程序(在C++11中),可以选择使用MPI并行运行。该项目使用CMake进行配置,如果找不到MPI,CMake会自动禁用MPI并显示相关警告消息。但是,我担心一个非常合理的用例,即用户在HPC集群上配置和编译程序,忘记加载MPI模块,并且没有注意到警告。然后同一用户可能会尝试运行该程序,注意未找到mpirun,包括MPI模块,但忘记重新编译。如果用户随后使用mpirun运行该程序,这将起作用,但该程序将只运行多次而没有任何并行化,因为MPI在编译时被禁用。为了防止用户认为程序是并行运行的,我想让程序在这种情况下显示一条错误消息。我的问题是:如何在不使用MPI库函数的情况下

C++ 概念 Same 和 Assignable

我最近一直在试验C++概念。我正在尝试以下范围扩展文档中的定义:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4569.pdfSame的定义和用法让我很困惑。由于我不知道的原因,作者没有给出明确的定义。所以我正在使用:templateconceptboolSame(){returnstd::is_same::value;}问题是文档给出了Assignable的以下定义:templateconceptboolAssignable(){returnCommon()&&requires(T&&a,U&&b){{std::fo

c++ - 如何使用 msgfmt 验证格式字符串中的位置符号占位符?

在翻译文本中使用类似printf的格式字符串时,msgfmt--check检查翻译是否仍然包含占位符。例如,在以下代码上运行xgettextprintf(gettext("string:%s,int:%d"),str,i)生成一个.po文件,其中msgid标记为c-format并且其值为"string:%s,整数:%d"。如果翻译者在翻译中忘记了%s或%d,则msgfmt会提示:numberofformatspecificationsin'msgid'and'msgstr'doesnotmatch不幸的是,此检查不适用于使用位置符号的格式字符串,例如boost::format(gett

c++ - 为什么 malloc 不返回?

我有一个正在运行的线程(OSX10.10.5)与此堆栈跟踪一起挂起。它是在运行约20小时后出现的,可能与内存不足有关。但是,问题是,为什么malloc不直接返回null?为什么线程的执行需要停止?实际请求的字节数很少(对于路径上的字符串操作)。std::wstringfinalPath=itsPath.substr(0,ls+1);1operatornew(unsignedlong)+37(libc++abi.dylib+124485)[0xa0339645]21malloc+29(libsystem_malloc.dylib+3997)[0xa1829f9d]21malloc_zon

c++ - 从 C 代码调用具有复杂参数和复杂返回类型的 C++ 函数

我有一个C++数学库并用Rust编写了一个项目。由于无法直接从Rust调用C++,但可以调用C,因此我决定编写一个从C++到C的标准包装器。除具有复杂参数的函数外,一切都或多或少地按预期工作,其中虚部由于某种原因丢失。下面我提供mwe。export_c++.h#ifdef__cplusplus#includestd::complexfoo(conststd::complexa);#endif#ifdef__cplusplusextern"C"{#endif#includedouble_Complexc_foo(constdouble_Complexa);#ifdef__cplusplu

二进制安全虚拟机Protostar靶场(6)堆的简单介绍以及实战 heap1

前言这是一个系列文章,之前已经介绍过一些二进制安全的基础知识,这里就不过多重复提及,不熟悉的同学可以去看看我之前写的文章程序静态分析https://exploit.education/protostar/heap-one/#include#include#include#include#includestructinternet{#定义了一个名为internet的结构体intpriority;#定义了一个int类型的priority函数char*name;#定义了一个char指针name函数};voidwinner()#winner函数{printf("andwehaveawinner@%d\

c - 开关盒奇怪的范围

在查看一些第3方C代码时,我发现了类似的东西:switch(state){case0:if(c=='A'){//openbrace//code...break;//bracenotclosed!case1://code...break;}//closebrace!case2://code...break;}在我审查的代码中,这似乎只是一个拼写错误,但令我惊讶的是它编译没有错误。为什么这个C有效?与在预期位置关闭大括号相比,这段代码的执行效果如何?这在任何情况下都有用吗?编辑:在示例中,我查看了所有中断都存在(如上所述)-但如果在0或1的情况下中断不存在,则答案也可能包括行为。

c++ - 约束包含是否仅适用于概念?

考虑这个例子:templateinlineconstexprboolC1=true;templateinlineconstexprboolC2=true;templaterequiresC1&&C2constexprintfoo(){return0;}templaterequiresC1constexprintfoo(){return1;}constexprintbar(){returnfoo();}是调用foo()不明确,或者约束C1&&C2包含C1? 最佳答案 是的。只有概念可以被包含。调用foo是模棱两可的,因为这两个声明都不

c++ - 将 Gravity(一种脚本语言)调用转换为 native C 函数调用

我目前正在研究实现一种更简洁的方法来从Gravity调用nativeC函数脚本语言。到目前为止,最简单的例子是这个:intadd(intlhs,intrhs){returnlhs+rhs;}staticvoidgravity_wrap_add(gravity_vm*vm,gravity_value_t*args,uint32_tnargs,uint32_tretIndex,void*data){intlhs,rhs,rt;//Unwraplhs=VALUE_AS_INT(args[1]);rhs=VALUE_AS_INT(args[2]);//Performcall,capturere

c++ - 如何从多个静态库中创建一个静态库?

我们最近将一个C++项目从VisualStudio6转换到VisualStudio8。一切都很顺利,直到我们编译了一个将所有静态库放入一个大静态库中的项目。默认情况下,在两个版本的项目之间转换后,项目没有做任何事情(没有创建大的静态库,它只是说项目是最新的)。我们通过向项目添加一个虚拟(空)文件找到了一个可行的解决方案(之前在VisualStudio6解决方案中没有其他文件)。一切顺利,我们设法使用新的开发环境(VisualStudio8)编译项目。我的问题是:如果不向项目中添加虚拟文件,还有其他方法可以做到这一点吗?提前感谢您的回复 最佳答案